home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / ctlmod / mapvars.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-01-23  |  1.6 KB  |  67 lines

  1. # include    <ingres.h>
  2. # include    <symbol.h>
  3. # include    <tree.h>
  4. # include    <sccs.h>
  5.  
  6. SCCSID(@(#)mapvars.c    8.1    12/31/84)
  7.  
  8. /*
  9. **  MAPVARS -- remap varno's to be unique in 'tree' tree
  10. **
  11. **    A tree is scanned for VAR nodes; when found, the
  12. **    mapping defined in Qt.qt_remap[] is applied.  This is done so that
  13. **    varno's as defined in trees in the 'tree' catalog will be
  14. **    unique with respect to varno's in the user's query tree.  For
  15. **    example, if the view definition uses variable 1 and the user's
  16. **    query also uses variable 1, the routine 'readqry' will (after
  17. **    calling 'declare' to assign a new slot), put the index of this
  18. **    new slot into the corresponding entry of Qt.qt_remap;
  19. **    in this example, Qt.qt_remap[1] == 3.  This routine does the actual
  20. **    mapping in the tree.
  21. **
  22. **    Parameters:
  23. **        tree -- pointer to tree to be remapped.
  24. **
  25. **    Returns:
  26. **        none
  27. **
  28. **    Side Effects:
  29. **        the tree pointed to by 'tree' is modified according
  30. **        to Qt.qt_remap[].
  31. **
  32. **    Trace Flags:
  33. **        7.4-7.7
  34. */
  35.  
  36. mapvars(tree)
  37. QTREE    *tree;
  38. {
  39.     register QTREE    *t;
  40.     register int    i;
  41.  
  42.     t = tree;
  43. #    ifdef xQTR3
  44.     if (tTf(7, 4) && t != NULL && t->sym.type == ROOT)
  45.     {
  46.         printf("mapvars:");
  47.         treepr(t);
  48.         for (i = 0; i < MAXVAR + 1; i++)
  49.             if (Qt.qt_rangev[i].rngvdesc != NULL && Qt.qt_remap[i] >= 0)
  50.                 printf("\t%d => %d\n", i, Qt.qt_remap[i]);
  51.     }
  52. #    endif
  53.  
  54.     while (t != NULL)
  55.     {
  56.         /* map right subtree */
  57.         mapvars(t->right);
  58.  
  59.         /* check this node */
  60.         if (t->sym.type == VAR)
  61.             t->sym.value.sym_var.varno = Qt.qt_remap[t->sym.value.sym_var.varno];
  62.  
  63.         /* map left subtree (iteratively) */
  64.         t = t->left;
  65.     }
  66. }
  67.